package com.wcbtest.oshi.domain;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import oshi.software.os.OSThread;

import java.io.Serializable;
import java.util.List;

@ApiModel(value = "系统进程信息")
@Data
public class Proc implements Serializable {
    @ApiModelProperty(value = "获取进程的名称，通常是可执行程序。")
    private String name;
    @ApiModelProperty(value = "获取正在执行的进程的完整文件系统路径。")
    private String path;
    @ApiModelProperty(value = "获取用于启动进程的进程命令行，包括参数（如果可确定）。")
    private String commandLine;
    @ApiModelProperty(value = "尽最大努力尝试获取进程的当前工作目录。")
    private String currentWorkingDirectory;
    @ApiModelProperty(value = "获取流程所有者的用户名。")
    private String user;
    @ApiModelProperty(value = "获取流程所有者的用户 ID。")
    private String userID;
    @ApiModelProperty(value = "获取在其下执行进程的组。\n")
    private String group;
    @ApiModelProperty(value = "获取执行进程的组 ID。\n")
    private String groupID;
    @ApiModelProperty(value = "进程状态;" +
            "INVALID：如果进程无法更新统计信息（可能是由于终止），则产生的状态。;\n" +
            "NEW：进程创建中的中间状态：OTHER：未定义其他或未知状态;\n" +
            "RUNNING：主动执行流程\n" +
            "SLEEPING：可中断的休眠状态;\n" +
            "STOPPED：由用户停止，例如用于调试;\n" +
            "SUSPENDED：如果进程已被有意暂停，则等待的特殊情况（仅限 Windows）;\n" +
            "WAITING：阻塞、不间断的睡眠状态;\n" +
            "ZOMBIE：进程终止中的中间状态;")
    private oshi.software.os.OSProcess.State state;
    @ApiModelProperty(value = "获取进程 ID。")
    private int processID;
    @ApiModelProperty(value = "获取此进程的父进程的进程 ID。")
    private int parentProcessID;
    @ApiModelProperty(value = "获取此进程正在执行的线程数。")
    private int threadCount;
    @ApiModelProperty(value = "获取此进程的优先级。")
    private int priority;
    @ApiModelProperty(value = "获取虚拟内存大小 （VSZ）。")
    private long virtualSize;
    private String virtualSizeFormat;
    @ApiModelProperty(value = "获取常驻集大小 （RSS）。")
    private long residentSetSize;
    private String residentSetSizeFormat;
    @ApiModelProperty(value = "获取进程使用的内核/系统 （特权） 时间。")
    private long kernelTime;
    @ApiModelProperty(value = "获取进程使用的用户时间。")
    private long userTime;
    @ApiModelProperty(value = "获取进程开始时间。")
    private long startTime;
    @ApiModelProperty(value = "获取启动时间/自进程启动以来的运行时间。")
    private long upTime;
    private String upTimeFormat;
    @ApiModelProperty(value = "获取进程读取的字节数。")
    private long bytesRead;
    @ApiModelProperty(value = "获取进程写入的字节数。")
    private long bytesWritten;
    @ApiModelProperty(value = "获取属于进程的打开文件句柄（或网络连接）的数量。\n")
    private long openFiles;
    @ApiModelProperty(value = "CPU 使用率百分比")
    //getProcessCpuLoadCumulative()    获取此进程的累积 CPU 使用率。
    private double cpuPercent;
    @ApiModelProperty(value = "线程详情")
    private List<OSThread> threadDetails;

    @ApiModelProperty(value = "显示条数")
    List<OSThread> showCount;

}

